﻿/**
 * nPnP - neither Perl not PHP
 *
 * Copyright (C) 2009 Christian Moeller
 *
 * This program is free software; you can redistribute it and/or modify it 
 * under the terms of the GNU General Public License as published by the 
 * Free Software Foundation; either version 3 of the License, or (at your option) 
 * any later version.
 * 
 * This program is distributed in the hope that it will be useful, but 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
 * or FITNESS FOR A PARTICULAR PURPOSE. 
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program; 
 * if not, see <http://www.gnu.org/licenses/>.
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FParser.Parser;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace FParser.Tools
{
    /// <summary>
    /// This is not really an opcode serialization, but it kicks of the parsing process
    /// so if you reuse code often you should preparse it!
    /// </summary>
    public static class OpCodeSerialization
    {
        public static void SerializeExpressions(List<Expression> expList, string fileName)
        {
            BinaryFormatter bFormatter = new BinaryFormatter();
            StreamWriter sWriter = new StreamWriter(fileName);
            bFormatter.Serialize(sWriter.BaseStream, expList);
            sWriter.Flush();
            sWriter.Close();
        }

        public static List<Expression> DeserializeExpressions(string fileName)
        {
            BinaryFormatter bFormatter = new BinaryFormatter();
            StreamReader sReader = new StreamReader(fileName);
            object data = bFormatter.Deserialize(sReader.BaseStream);
            return ((List<Expression>)data);
        }
    }
}
